package com.netlisten;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.Properties;

public class Config {
    // 目标主机（域名或IP地址）
    public static String TARGET_HOST;
    
    // 目标端口（如果需要）
    public static int TARGET_PORT;
    
    // 源主机（域名或IP地址）
    public static String SOURCE_HOST;
    
    // 源端口（如果需要）
    public static int SOURCE_PORT;
    
    // 网络设备名称
    public static String DEVICE_NAME;
    
    // 日志文件路径
    public static final String LOG_FILE_PATH = "network_log.txt";
    
    // 通信日志文件路径
    public static final String COMMUNICATION_LOG_PATH = "communication_log.json";
    
    // 是否启用详细日志
    public static final boolean VERBOSE_LOGGING = true;
    
    // 日志文件最大大小（字节）
    public static final long MAX_LOG_SIZE = 10 * 1024 * 1024;  // 10MB
    
    // 日志文件备份数量
    public static final int LOG_BACKUP_COUNT = 5;
    
    static {
        Properties props = new Properties();
        InputStream input = null;
        
        try {
            // 首先尝试从jar包同级目录加载配置文件
            String configPath = Paths.get("config.properties").toAbsolutePath().toString();
            File configFile = new File(configPath);
            
            if (configFile.exists() && configFile.isFile()) {
                System.out.println("从外部文件加载配置: " + configPath);
                input = new FileInputStream(configFile);
            } else {
                // 如果外部文件不存在，则从classpath加载
                System.out.println("外部配置文件不存在，从classpath加载配置");
                input = Config.class.getClassLoader().getResourceAsStream("config.properties");
            }
            
            if (input == null) {
                System.err.println("无法找到 config.properties 文件");
                // 设置默认值
                TARGET_HOST = "1.1.1.1";
                TARGET_PORT = 0;
                SOURCE_HOST = "1.1.1.1";
                SOURCE_PORT = 0;
                DEVICE_NAME = "\\Device\\NPF_{111}";
            } else {
                props.load(input);
                TARGET_HOST = props.getProperty("TARGET_HOST", "1.1.1.1");
                TARGET_PORT = Integer.parseInt(props.getProperty("TARGET_PORT", "0"));
                SOURCE_HOST = props.getProperty("SOURCE_HOST", "1.1.1.1");
                SOURCE_PORT = Integer.parseInt(props.getProperty("SOURCE_PORT", "0"));
                DEVICE_NAME = props.getProperty("DEVICE_NAME", "\\Device\\NPF_{111}");
            }
        } catch (IOException | NumberFormatException ex) {
            ex.printStackTrace();
            // 设置默认值
            TARGET_HOST = "1.1.1.1";
            TARGET_PORT = 0;
            SOURCE_HOST = "1.1.1.1";
            SOURCE_PORT = 0;
            DEVICE_NAME = "\\Device\\NPF_{111}";
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}